/**
 * 统一的Loading状态管理工具
 * 解决uni.hideLoading()在没有对应showLoading时报错的问题
 */

let loadingCount = 0
let isLoadingShown = false
let loadingTimer = null // 用于存储超时定时器

/**
 * 显示Loading
 * @param {Object} options - loading配置选项
 * @param {string} options.title - loading文本，默认为'加载中...'
 * @param {boolean} options.mask - 是否显示透明蒙层，默认为true
 * @param {number} options.timeout - 超时时间（毫秒），默认为5000ms
 */
export function showLoading(options = {}) {
  const config = {
    title: '加载中...',
    mask: true,
    timeout: 5000, // 默认5秒超时
    ...options
  }
  
  try {
    loadingCount++
    if (!isLoadingShown) {
      uni.showLoading({
        title: config.title,
        mask: config.mask
      })
      isLoadingShown = true
      
      // 设置超时自动隐藏
      if (loadingTimer) {
        clearTimeout(loadingTimer)
      }
      loadingTimer = setTimeout(() => {
        if (isLoadingShown) {
          console.warn('Loading超时自动隐藏')
          forceHideLoading()
          uni.showToast({
            title: '请求超时，请重试',
            icon: 'none',
            duration: 2000
          })
        }
      }, config.timeout)
    }
  } catch (error) {
    console.warn('showLoading error:', error)
  }
}

/**
 * 隐藏Loading
 * 只有在确实显示了loading的情况下才会调用uni.hideLoading()
 */
export function hideLoading() {
  try {
    loadingCount--
    if (loadingCount <= 0) {
      loadingCount = 0
      if (isLoadingShown) {
        uni.hideLoading()
        isLoadingShown = false
      }
      // 清除超时定时器
      if (loadingTimer) {
        clearTimeout(loadingTimer)
        loadingTimer = null
      }
    }
  } catch (error) {
    console.warn('hideLoading error:', error)
    // 发生错误时重置状态
    loadingCount = 0
    isLoadingShown = false
    if (loadingTimer) {
      clearTimeout(loadingTimer)
      loadingTimer = null
    }
  }
}

/**
 * 强制隐藏Loading
 * 无论当前状态如何，都会尝试隐藏loading并重置计数
 */
export function forceHideLoading() {
  try {
    loadingCount = 0
    if (isLoadingShown) {
      uni.hideLoading()
      isLoadingShown = false
    }
    // 清除超时定时器
    if (loadingTimer) {
      clearTimeout(loadingTimer)
      loadingTimer = null
    }
  } catch (error) {
    console.warn('forceHideLoading error:', error)
    loadingCount = 0
    isLoadingShown = false
    if (loadingTimer) {
      clearTimeout(loadingTimer)
      loadingTimer = null
    }
  }
}

/**
 * 获取当前Loading状态
 * @returns {Object} 包含loadingCount和isLoadingShown的状态对象
 */
export function getLoadingState() {
  return {
    loadingCount,
    isLoadingShown
  }
}

/**
 * 重置Loading状态
 * 用于页面卸载或异常情况下的状态重置
 */
export function resetLoadingState() {
  loadingCount = 0
  isLoadingShown = false
  if (loadingTimer) {
    clearTimeout(loadingTimer)
    loadingTimer = null
  }
}

// 默认导出
export default {
  showLoading,
  hideLoading,
  forceHideLoading,
  getLoadingState,
  resetLoadingState
}